package com.cy.pj.notice.dao;

import com.cy.pj.notice.pojo插件lombok注解代替set和get方法.SysNotice;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 扩展底层实现类的原理代码--底层都封装了，用@Mapper代替了
 */
@Repository
public class SysNoticeDaolmpl当Dao接口没mapper备注时实现Dao implements SysNoticeDao {
    @Autowired
    private SqlSession sqlSession;

    /**
     * 1,依赖注入sqlsession--底层封装了jdbc和datasource,会话数据库
     * 2,通过全局限定名的key找到映射文件的SQL语句
     * 3，通过sqlsession执行sql的查询，返回结果list集合
     * 4，再将list结果集传给了 DAO接口方法的 pojo属性
     * 5，最后再依赖注入DAO,把参数notice set注入到pojo里，再调用接口查询方法执行sql
     * 6,获取了查询结果集
     */
    @Override
    public List<SysNotice> selectNotices(SysNotice notice) {
        /**
         * 用更灵活的方式获取命名空间
         * 获取这个类的反射字节码的接口(就一个)的名字
         */
        String namespace = this.getClass().getInterfaces()[0].getName();
        //获取当前线程的方法栈，并取到当前方法的名字
        String elementId = Thread.currentThread().getStackTrace()[1].getMethodName();
        String statement = namespace + "." + elementId;
        System.out.println("statement=" + statement);
        //String statement="com.cy.pj.notice.dao.SysNoticeDao.selectNotices";
        List<SysNotice> list = sqlSession.selectList(statement, notice);
        return list;
    }

    @Override
    public int deleteById(Long... id) {
        return 0;
    }

    @Override
    public SysNotice selectById(Long id) {
        return null;
    }

    @Override
    public int insertNotice(SysNotice notice) {
        return 0;
    }

    @Override
    public SysNotice findById(Long id) {
        return null;
    }

    @Override
    public int updateNotices(SysNotice notice) {

        return 0;
    }


}
